const pen = {
    price: 10,
    set(value) {
        this.price = value;
    },
    get() {
        console.log('pen.price', this.price)
    }
}

// pen.set(33);
// pen.get();
/**
 * 构建类对象的时候，可以构建set,get方法
 */

const o = {
    age: 22,
    name: '张三',
    // [helloWorld]: 'hello',
    helloWorld: 'hello'
}

// console.log('o.age', o.age)
// console.log('o[age]', o['age'])
// console.log('o.name', o.name)
// console.log('o[name]', o['name'])
/**
 * 通过.来获取属性的时候可以直接获取
 * 通过数组的方式，要通过['']，里面的属性名要添加相对应的单引号''
 */

const water = {
    Volume: 0,
    getVolume() {
        return this.Volume;
    },
    // ['set' + 'Volume'](value) {
    //     console.log(value);
    //     if (Number.parseInt(value) >= 0) {
    //         this.Volume = value;
    //     } else {
    //         console.error(value);
    //     }
    // },

    ['set' + 'Volume']: (value) => {
        if (Number.parseInt(value) >= 0) {
            water.Volume = value;
        } else {
            console.error(value);
        }
    },
}
/**
 * 当采用箭头函数的时候，this就指的是全文对象了，而并非是当前对象，所以当使用箭头函数的时候，那么可以考虑直接用类.属性来引用对象了
 * 如果采用原来的function(),那么就是当前类对象的this。
 */



// console.log('water.getVolume()', water.getVolume());
// water.setVolume(21);
// console.log('water.getVolume()', water.getVolume());
// water.setVolume(-2);
// console.log('water.getVolume()', water.getVolume());

class proto {
    constructor() {
        this.foo = 'world'
    }
}

class obj extends proto {
    constructor() {
        super();
        this.foo = 'world'
    };
    find() {
        return super.foo;
    };
    getFoo() {
        return this.foo;
    }
}

class people {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    toString() {
        console.log('[name=' + this.name + ',age=' + this.age + ']');
    }
    setAge(value) {
        this.age = value
    }
    setName(el) {
        this.name = el
    }
}

const p1 = new people("张三", 22);
p1.toString();
p1.setAge(200);
p1.setName('李四')
p1.toString()